import java.util.*;

/**
 * Created by zhourh on 2018/9/10.
 *
 * 给定两个句子 A 和 B 。 （句子是一串由空格分隔的单词。每个单词仅由小写字母组成。）

 如果一个单词在其中一个句子中只出现一次，在另一个句子中却没有出现，那么这个单词就是不常见的。

 返回所有不常用单词的列表。

 您可以按任何顺序返回列表。



 示例 1：

 输入：A = "this apple is sweet", B = "this apple is sour"
 输出：["sweet","sour"]
 示例 2：

 输入：A = "apple apple", B = "banana"
 输出：["banana"]
 */
public class UncommonWordsFromTwoSentences {

    public static void main(String[] args) {
        Printer.printArray(new UncommonWordsFromTwoSentences().uncommonFromSentences("this apple is sweet", "this apple is sour"));
        Printer.printArray(new UncommonWordsFromTwoSentences().uncommonFromSentences("apple apple", "banana"));
    }

    public String[] uncommonFromSentences(String A, String B) {
        if (A == null && B == null) {
            return null;
        }

        Map<String, Integer> wordMap = new HashMap<>();

        computeWordCount(A, wordMap);
        computeWordCount(B, wordMap);

        Iterator<Map.Entry<String, Integer>> iterator = wordMap.entrySet().iterator();
        List<String> result = new ArrayList<>();
        while (iterator.hasNext()) {
            Map.Entry<String, Integer> entry = iterator.next();
            if (entry.getValue() == 1) {
                result.add(entry.getKey());
            }
        }

        String[] resultArray = new String[result.size()];
        result.toArray(resultArray);
        return resultArray;
    }

    private void computeWordCount(String s, Map<String, Integer> wordMap) {
        if (s == null || s.isEmpty()) {
            return;
        }

        String[] words = s.split(" ");
        for (String word : words) {
            wordMap.put(word, wordMap.getOrDefault(word, 0) + 1);
        }

        return;
    }
}
